##############################################################
## MOD Title: Seed Points Mod
## MOD Author: RoadTrain
## Updated MOD TP II: DarkMod
## MOD Version: 0.1
## :     ,        (  ).
## Installation Level: Easy
## Installation Time: 5 Minutes
## License: http://opensource.org/licenses/gpl-license.php GNU General Public License v2
##############################################################


# 
#-----[ COPY ]---------------------------------
#
\root\includes\ucp\usercp_bonus.php to /includes/ucp/usercp_bonus.php
\root\templates\usercp_bonus.tpl to /templates/usercp_bonus.tpl

#
#-----[ SQL ]---------------------------------
#
ALTER TABLE `bb_bt_tracker` ADD `seed_time_add` int(11) NOT NULL default '0' AFTER `down_add`;
ALTER TABLE `bb_bt_last_torstat` ADD `seed_time_add` int(11) NOT NULL default '0' AFTER `bonus_add`;
ALTER TABLE `bb_bt_last_torstat` ADD `seeder` tinyint(1) NOT NULL default '0' AFTER `seed_time_add`;
ALTER TABLE `bb_bt_last_userstat` ADD `topics_count` mediumint(8) NOT NULL AFTER `user_id`;
ALTER TABLE `bb_bt_last_userstat` ADD `seed_points_raw` float(16,3) unsigned NOT NULL default '0.000' AFTER `bonus_add`;
ALTER TABLE `bb_bt_users` ADD `seed_points` float(16,3) unsigned NOT NULL default '0.000';

#
#-----[ OPEN ]---------------------------------
#
bt/announce.php

#
#-----[ FIND ]---------------------------------
#
// Insert/update peer info
$peer_info_updated = false;
$update_time = ($stopped) ? 0 : TIMENOW;
#
#-----[ BEFORE, ADD ]---------------------------------
#

// Seed time
$seed_time_add = ($seeder && $lp_info && TIMENOW > $lp_info['update_time']) ? TIMENOW - $lp_info['update_time'] : 0;

#
#-----[ FIND ]---------------------------------
#
	$sql .= ($down_add) ? ", down_add = down_add + $down_add" : '';

#
#-----[ AFTER, ADD ]---------------------------------
#

	$sql .= ($seed_time_add) ? ", seed_time_add = seed_time_add + $seed_time_add" : '';

#
#-----[ OPEN ]---------------------------------
#
includes/functions.php
#
#-----[ FIND ]---------------------------------
#
function get_attachments_dir ($cfg = null)
#
#-----[ BEFORE, ADD ]---------------------------------
#
// Seed points [START]
function get_bonus_sql_case ($factors_ary, $column_count, $column_points)
{
	$sql = "CASE";
	
	$count_prev = '';
	foreach ($factors_ary as $count => $factor)
	{
		$sql .= " WHEN $column_count > $count". 
				(isset($factors_ary[$count_prev]) ? " AND $column_count < {$count_prev}" : '') .
				" THEN $column_points*$factor ";
		$count_prev = $count;
	}
	return $sql . " ELSE $column_points END";
}
// Seed points [END]

#
#-----[ FIND ]---------------------------------
#
		'DOWN_TOTAL_BYTES' => $btu['u_down_total'],
#
#-----[ AFTER, ADD ]---------------------------------
#
		'SEED_POINTS'      => $btu['seed_points'],
#
#-----[ OPEN ]---------------------------------
#
includes/cron/jobs/tr_cleanup_and_dlstat.php

#
#-----[ FIND ]---------------------------------
#
		// Get PER TORRENT user's dlstat from tracker
		DB()->query("
			INSERT INTO ". NEW_BB_BT_LAST_TORSTAT ."
				(topic_id, user_id, dl_status, up_add, down_add, release_add, speed_up, speed_down)
			SELECT
				topic_id, user_id, IF(releaser, $releaser, seeder), SUM(up_add), SUM(down_add), IF(releaser, SUM(up_add), 0), SUM(speed_up), SUM(speed_down)
			FROM ". BB_BT_TRACKER ."
			WHERE (up_add != 0 OR down_add != 0)
			GROUP BY topic_id, user_id
		");

		// Reset up/down additions in tracker
		DB()->query("UPDATE ". BB_BT_TRACKER ." SET up_add = 0, down_add = 0");
#
#-----[ REPLACE WITH ]---------------------------------
#
		// Get PER TORRENT user's dlstat from tracker
		DB()->query("
			INSERT INTO ". NEW_BB_BT_LAST_TORSTAT ."
			(topic_id, user_id, dl_status, up_add, down_add, release_add, seed_time_add, seeder, speed_up, speed_down)
			SELECT
			topic_id, user_id, IF(releaser, $releaser, seeder), SUM(up_add), SUM(down_add), IF(releaser, SUM(up_add), 0), SUM(seed_time_add), seeder, SUM(speed_up), SUM(speed_down)
			FROM ". BB_BT_TRACKER ."
		WHERE (up_add != 0 OR down_add != 0 OR seed_time_add != 0)
			GROUP BY topic_id, user_id
		");

		// Reset up/down additions in tracker
	DB()->query("UPDATE ". BB_BT_TRACKER ." SET up_add = 0, down_add = 0, seed_time_add = 0");        
#
#-----[ FIND ]---------------------------------
#
		// Get SUMMARIZED user's dlstat
		DB()->query("
			INSERT INTO ". NEW_BB_BT_LAST_USERSTAT ."
				(user_id, up_add, down_add, release_add, bonus_add, speed_up, speed_down)
			SELECT
				user_id, SUM(up_add), SUM(down_add), SUM(release_add), SUM(bonus_add), SUM(speed_up), SUM(speed_down)
			FROM ". NEW_BB_BT_LAST_TORSTAT ."
			GROUP BY user_id
		");

		// Update TOTAL user's dlstat
		DB()->query("
			UPDATE
				". BB_BT_USERS             ." u,
				". NEW_BB_BT_LAST_USERSTAT ." ub
			SET
				u.u_up_total   = u.u_up_total   + ub.up_add,
				u.u_down_total = u.u_down_total + ub.down_add,
				u.u_up_release = u.u_up_release + ub.release_add,
				u.u_up_bonus   = u.u_up_bonus   + ub.bonus_add
			WHERE u.user_id = ub.user_id
		");
#
#-----[ REPLACE WITH ]---------------------------------
#
	// Get SUMMARIZED user's dlstat
	$db->query("
		INSERT INTO ". NEW_BT_LAST_USERSTAT_TABLE ."
			(user_id, topics_count, up_add, down_add, release_add, bonus_add, seed_points_raw, speed_up, speed_down)
		SELECT
			user_id, SUM(seeder), SUM(up_add), SUM(down_add), SUM(release_add), SUM(bonus_add), ((SUM(seed_time_add)*{$bb_cfg['seed_points_per_hour']})/(3600*SUM(seeder))), SUM(speed_up), SUM(speed_down)
		FROM ". NEW_BT_LAST_TORSTAT_TABLE ."
		GROUP BY user_id
	");

	// Update TOTAL user's dlstat
	$db->query("
		UPDATE
			". BT_USERS_TABLE             ." u,
			". NEW_BT_LAST_USERSTAT_TABLE ." ub
		SET
			u.u_up_total   = u.u_up_total   + ub.up_add,
			u.u_down_total = u.u_down_total + ub.down_add,
			u.u_up_release = u.u_up_release + ub.release_add,
			u.u_up_bonus   = u.u_up_bonus   + ub.bonus_add,
			u.seed_points  = u.seed_points  + (". get_bonus_sql_case ($bb_cfg['seed_points_f'], 'ub.topics_count', 'ub.seed_points_raw') .")
		WHERE u.user_id = ub.user_id
	");
#
#-----[ OPEN ]---------------------------------
#
profile.php

#
#-----[ FIND ]---------------------------------
#
	case 'email':
		require(INC_DIR .'ucp/usercp_email.php');
		break;
		
#
#-----[ AFTER, ADD ]---------------------------------
#
	case 'bonus':
		require(INC_DIR . 'ucp/usercp_bonus.php');
		break;

#
#-----[ OPEN ]---------------------------------
#
templates/default/usercp_viewprofile.tpl
#
#-----[ FIND ]---------------------------------
#
		<tr>
			<th width="50%">{L_BONUS}:</th>
			<td width="50%" id="u_up_bonus">
				<span class="editable seed">{UP_BONUS}</span>
			</td>
		</tr>

#
#-----[ AFTER, ADD ]---------------------------------
#
		<!-- IF $bb_cfg['seed_points_enabled'] -->
		<tr>
			<th width="50%">{L_SEED_POINTS}:</th>
			<td width="50%" id="seed_time">
				<span class="seed">{SEED_POINTS}</span>
				<!-- IF EDIT_PROF -->&nbsp;[ <a href="profile.php?mode=bonus" class="med">{L_SEED_POINTS_EXCHANGE}</a> ]<!-- ENDIF -->
			</td>
		</tr>
		<!-- ENDIF -->
	
#
#-----[ OPEN ]---------------------------------
#
config_mods.php

#
#-----[ ADD TO END OF FILE ]---------------------------------
#
// Seed points [START]
$bb_cfg['seed_points_enabled'] = true;

$bb_cfg['seed_points_per_hour'] = 1; // Base value

$bb_cfg['seed_points_f'] = array( // Factors depending on count of seeding torrents
	'50' => 2,
	'25' => 1.5,
	'1'  => 1,
);

$bb_cfg['seed_points_ex'] = array( // Exchanges ary
	'upload' => array( // Please keep order ascending!
		# traffic (in GiB) => cost
		'1'   => 75,
		'2.5' => 150,
		'5'   => 250,
		'10'  => 350,
		'20'  => 500,
	),
	'invite' => array(
		# invites => cost
		1   => 1500
	),
);
// Seed points [END]

#
#-----[ OPEN ]---------------------------------
#
language/lang_russian/lang_main.php

#
#-----[ ADD TO THE END ]---------------------------------
#
// Seed points [START]
$lang['SEED_POINTS'] = '  ';
$lang['BONUS_TYPE'] = ' ';
$lang['SEED_POINTS_SHORT'] = '';
$lang['SEED_POINTS_EXCHANGE'] = '';
$lang['My_bonus'] = ' ';
$lang['Upload_Tip'] = '     ,        ,   ,      .';
$lang['Invite_Tip'] = '     ,       (  )   -  .';
$lang['Points_not_enough'] = " ";
$lang['Successfully_exchanged_up'] = "    . <b>%s</b>  ,   <b>%s</b>  .";
$lang['Successfully_exchanged_invite'] = "    (). <b>%s</b>  ,   <b>%s</b> .";
$lang['Return_to_bonus'] = "   ";
// Seed points [END]

#
#-----[ SAVE/CLOSE ALL FILES ]---------------------------------
#
# EoM
